AWS WAF 정리 그리고 페일 오픈에 대해
안녕하세요 클래스메소드의 수재입니다.
AWS WAF를 사용하기 위해 조건 등을 검토하다보면 다양한 부분에 대해 검토하고 도입하게 됩니다.
이번 글에서는 AWS WAF의 페일 오픈에 대해 어떤 식으로 검토하면 좋을지 정리해보았습니다.
WAF란?
WAF는 Web Application Firewall의 약자로 웹 애플리케이션을 보호하는 솔루션입니다.
WAF를 사용하면 IP 주소, HTTP 헤더, HTTP 본문, URI 문자열, XSS, SQL 삽입 및 기타 OWASP 정의 취약성을 비롯한 인터넷 위협을 방지할 수 있습니다.
방화벽과 비슷하지만 방화벽(Network Firewall)과 중복 역할(L3/L4의 보호 기능)을 가지고 있는 것은 아니고 L7에 대해서만 동작합니다.
또한 IDS/IPS와도 역할이 다릅니다. 따라서 방화벽, IDS/IPS, WAF 중 하나를 이용하면 다른 것은 이용하지 않아도 되는 것이 아니라 조건에 따라 알맞은 도입이 필요합니다.
AWS WAF란?
말그대로 AWS에서 제공하고 있는 WAF 서비스입니다.
어떠한 룰을 적용한 WAF를 CloudFront, ALB, API Gateway, Global Accelerator 등에 연결하여 사용합니다.
특징
AWS WAF는 아래의 구성 요소를 가지고 있습니다.
- 웹 액세스 제어 목록(Web ACLs)
- 규칙(Rule)
- 규칙 그룹(Rule Group)
Web ACLs에 다양한 Rule Group이 포함되며 Rule Group에는 각각의 Rule이 포함된 형태입니다.
파라미터를 설정하여 필요한 룰을 작성하여 그룹을 만들어 운용할 수 있습니다.
적절한 룰을 설정하지 못하는 경우 AWS 에서 제공한 룰을 그대로 이용하는 것 또한 가능합니다.
이외에 마켓 플레이스에서 AWS WAF의 Web ACLs를 판매하고 있으니 필요하시다면 그쪽을 참고하시는 것도 좋다고 생각됩니다.
AWS WAF는 다음과 같은 장점이 있습니다.
- AWS에서 서비스를 관리
- 간편한 운용
- 종량 과금
- 간단한 로그 출력 및 다른 AWS 서비스와의 연계
AWS WAF로 할 수 없는 일은 다음이 있습니다.
- 상용 WAF 레벨의 상세한 룰 조정
- 모든 패킷의 로그 획득
이 외에 AWS WAF 자체에 대한 상세한 내용은 다음 글을 참고해주세요
AWS WAF의 페일 오픈(fail open)
(이 글에서는 WAF를 ALB에 연결하는 것을 가정하여 설명하겠습니다.)
위에서 설명했듯이 AWS WAF는 하나의 독립적인 서비스이며 이를 다른 서비스에 연결하여 사용하는 식으로 운용됩니다.
따라서 AWS WAF나 연결되어 있는 서비스 중 한 쪽에서 장애가 발생한다면 다른 쪽에도 함께 장애가 발생하며 WAF가 연결되는 서비스 특성 상 환경 전체에 영향을 끼치게 될 확률이 높습니다.
이러한 영향을 최소화 하기 위해서 실패한 액세스(혹은 장애)에 대해서 어떻게 처리할지 검토가 필요합니다.
보통 장애가 발생하였을 때 액세스를 통과시키는 페일 오픈(Fail Open)과 액세스를 차단하는 페일 클로즈(Fail Close)로 나눌 수 있습니다.
ALB의 경우 AWS 환경의 보안을 우선시하여 WAF에 장애가 발생한다면 페일 클로즈를 기본으로 동작합니다.
대부분의 환경에서 ALB가 환경으로의 진입점 역할을 하기 때문에 결과적으로 WAF의 장애가 운용 환경 전체의 장애로 발전할 확률이 높습니다.
또한 WAF는 99.95%의 SLA를 보장합니다.
따라서 한 달에 20~21분 정도는 문제가 발생할 가능성이 있습니다.
이 때 페일 오픈을 채택할지 페일 클로즈를 채택할지의 검토가 필요한 경우도 있습니다.
WAF의 페일 오픈 방법
ALB의 경우 WAF 장애 시 Fail Open을 하는 설정이 있습니다.
ALB를 작성 후 ALB의 속성을 보시면 이미지와 같은 옵션이 있습니다.
해당 옵션을 유효화하면 연결된 WAF에 장애가 발생하더라도 액세스를 통과시킵니다.
그 외의 WAF 사용 시 주의할 점
우선 당연하지만(그리고 그만큼 어렵지만) WAF의 베스트 프랙티스를 확인하여 내용을 검토하는 것이 가장 좋다고 생각됩니다.
ALB나 CloudFront, Global Accelerator 등 환경의 선두에서 액세스를 체크하는 서비스인 만큼 로그를 제대로 관리하는 것이 중요합니다.
또한 보안 기업들이 작성한 서드 파티의 룰을 사용하기 힘든 상황이라면 대부분의 공격을 방어하도록 설정되어 있는 AWS 의 매니지드 ACLs를 적용하여 사용하는 것이 권장됩니다.
그리고 WAF를 처음 배포하기 전에 COUNT 모드로 배포하여 로그를 분석한 후 적절한 룰으로 설정하는 작업이 필요합니다.
저장한 로그나 매트릭을 이용하여 경보를 설정하는 것 또한 추천됩니다.
WAF를 적용할 수 있는 서비스를 모두 운용하고 있는 경우 WAF를 어디에 연결할지에 따라서 기대할 수 있는 효과가 달라집니다.
그리고 연결한 서비스에 따라 적용할 룰을 다르게 설정하여 WCU의 적절한 분배가 가능합니다.
이 내용에 대해서는 다음 블로그가 참고가 될 것 같습니다
마무리
AWS WAF에 대하여 간략하게 알아보았습니다.
이번 글에서는 WAF의 적절한 룰 설정에 대해서는 생략하여 넘어갔습니다.
아무래도 환경에 따라서 알맞은 설정 값이 다르기 때문에 무엇이 맞다고 하긴 힘드네요.
다음 글들을 참고하시면 적절한 룰을 설정하는데 도움이 될 것이라 생각됩니다.
- AWS WAF의 가장 중요한 세가지 속도 기반 규칙
- AWS WAF에서 AWS 관리형 규칙의 동작을 커스터마이징하는 방법
- WAF on AWS: The Basics and 3 Critical Best Practices
- AWS Load Balancers & WAF: Availability vs Security with 'fail open'.
- 「安全に楽をする」ならベストプラクティスに従うのが一番 AWS上のWebアプリの運用における3項目のセキュリティ対策
- AWS WAFを完全に理解する ~WAFの基礎からv2の変更点まで~
긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 must01940 지메일로 보내주시면 감사합니다.